package com.hua.yuan.http;

import com.zhy.http.okhttp.OkHttpUtils;
import com.zhy.http.okhttp.callback.FileCallBack;
import com.zhy.http.okhttp.callback.StringCallback;

import java.io.File;
import java.util.Map;

import okhttp3.Call;

/**
 * 网络请求的基础代码
 * 对OkHttp的简单封装
 */
public abstract class RequestTask {

    /**
     * 请求成功的函数,有返回值的
     */

    public abstract void onSuccess(String result);

    /**
     * 请求失败的函数
     */


    public abstract void onFail();

    /**
     * 数据请求 异步请求
     *
     * @ url 请求的action
     * @ tag 请求的标签，按照一定的规则进行命名
     * @ params 请求的参数
     */
    public void executePost(String url, String tag, Map<String, String> params) {
        doInBackground(url, tag, params);
    }

    /**
     * 数据请求 异步请求
     *
     * @ url 请求的action
     * @ tag 请求的标签，按照一定的规则进行命名
     * @ params 请求的参数
     */
    public void executePostSSL(String url, String tag, Map<String, String> params) {
        doInBackgroundSSL(url, tag, params);
    }

    /**
     * 数据请求，普通的网络请求
     *
     * @ url 请求的action
     * @ tag 请求的标签，按照一定的规则进行命名
     * @ params 请求的参数
     */

    private void doInBackground(String url, final String tag, Map<String, String> params) {


        String _url = BaseUrl.BASE_URL + url + "?";

        OkHttpUtils.post()
                .url(_url)
                .params(params)
                .build()
                .execute(new StringCallback() {
                    @Override
                    public void onError(Call call, Exception e, int id) {
                        onFail();
                    }

                    @Override
                    public void onResponse(String response, int id) {
                        onSuccess(response);
                    }
                });

    }

    /**
     * https网络请求
     *
     * @param url    地址 action
     * @param tag    标签
     * @param params 参数
     */
    private void doInBackgroundSSL(String url, final String tag, Map<String, String> params) {

        String _url = BaseUrl.BASE_URL_SSL + url + "?";
        OkHttpUtils.post()
                .url(_url)
                .params(params)
                .build()
                .execute(new StringCallback() {
                    @Override
                    public void onError(Call call, Exception e, int id) {
                        onFail();
                    }

                    @Override
                    public void onResponse(String response, int id) {
                        onSuccess(response);
                    }
                });
    }


    /**
     * 下载文件
     *
     * @param url          请求的url
     * @param destFileDir  目标文件存储的文件夹路径
     * @param destFileName 目标文件存储的文件名
     */

    public void downLoadFile(String url, String destFileDir, String destFileName) {
        OkHttpUtils.postFile().url(url).build().execute(new FileCallBack(destFileDir, destFileName) {
            @Override
            public void onError(Call call, Exception e, int id) {

            }

            @Override
            public void onResponse(File response, int id) {

            }

            @Override
            public void inProgress(float progress, long total, int id) {
                super.inProgress(progress, total, id);



            }
        });
    }


}
